package oj;
//原地移除数组中所有的元素val，要求时间复杂度为O(N)，空间复杂度为O(1)。
//https://leetcode.cn/problems/remove-element/description/
public class Test1 {
    public static void main(String[] args) {

        Solution s = new Solution();
        int[] nums = new int[]{5,2,3,4,5,6,5,8,5};
        System.out.println(s.removeElement(nums, 8));
        System.out.println(nums);
        for (int i = 0; i < nums.length; i++) {

            System.out.println(nums[i]);

        }


    }
}
class Solution {
    public int removeElement(int[] nums, int val) {

        //
        int size = nums.length;//所给数组长度
        int j = size-1;
        for (int i = 0; i < size; i++) {

            //
            if(nums[i] != val){

                continue;

            }





            //能走到这里，说明：当前i下标的值等于val
            size--;
            //所以：size--————算了，不写在这里了，后边如果找不到一个非val的了，就多减了
            while(j>i){

                if(nums[j] == val){
                    j--;
                    size--;
                }else{


                    if(nums[j] != val){

                        //int tmp = nums[i];
                        nums[i] = nums[j];
                        nums[j] = val;
                        j--;
                        //size--;
                        //在这里--比较安心~
                        //改掉：
                        // i下标发现val,size--
                        // j下标发现val,size--


                    }
                    break;
                    //找到倒数第一个非val的元素的下标
                    //并完成元素交换（其实元素交换可以封装一个方法的）

                }

            }






        }
        return size;


    }
}
